package cn.wuyi.common.rest;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang3.StringUtils;


public class RestUtils {
	
	private static RESTClientImpl client = null;
	
	public static RESTClientImpl getClient(){
		if(client == null){
			client = new RESTClientImpl();
		}
		return client;
		
	}
	
	/**
	 * @方法功能说明：将map中的值装换为key=value&key=value格式的字符串
	 * @param paramMap
	 * @return
	 */
	public static String getParamStr(Map<String,String> paramMap){
		StringBuilder paramSb = new StringBuilder();
		if(paramMap != null && paramMap.size() > 0){
			for(Entry<String, String> entry : paramMap.entrySet()){
				String key = entry.getKey();
				String value = entry.getValue();
				if(StringUtils.isNotBlank(key)){
					paramSb.append("&").append(key).append("=").append(value);
				}
			}
		}
		String params = null;
		if(paramSb.length() > 0){
			params = paramSb.substring(1);
		}
		return params;
	}
	
	/**
	 * @方法功能说明：发送HTTP的GET请求获取数据 
	 * @创建时间    ：2018年6月19日 下午11:49:14 
	 * @param url 请求url
	 * @param header 请求头
	 * @param parameter 请求参数
	 * @return
	 */
	public static ResponseResult<String> getRequest(String url,Map<String,String> header,Map<String,String> parameter){
		getClient();
		ResponseResult<String> result = client.getForObject(url, null, header, parameter);
		return result;
	}
	
	/**
	 * @方法功能说明：发送HTTP的POST请求获取数据,请求体中的数据以key=value的形式发送
	 * @创建时间    ：2018年4月27日 下午9:14:06 
	 * @param url 请求URL
	 * @param params key=value&key1=value1格式的字符串
	 * @return
	 */
	public static ResponseResult<String> postRequest(String url,Map<String,String> params) {
		//将请求参数装换为key=value&key=value格式的字符串
		String requestBody = getParamStr(params);
		//请求头
		Map<String, String> header = new HashMap<String, String>();
		header.put("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
		return postRequest(url, requestBody, header);
	}
	
	/**
	 * @方法功能说明：发送HTTP的POST请求获取数据
	 * @创建时间    ：2018年6月20日 上午12:14:07 
	 * @param url 请求URL
	 * @param requestBody 请求体
	 * @param header 请求头
	 * @return
	 */
	public static ResponseResult<String> postRequest(String url,Object requestBody,Map<String,String> header){
		return postRequest(url, requestBody, header, null);
	}
	
	/**
	 * @方法功能说明：发送HTTP的POST请求获取数据
	 * @创建时间    ：2018年6月20日 上午12:14:45 
	 * @param url 请求URL
	 * @param requestBody 请求体
	 * @param header 请求头
	 * @param parameter 请求参数
	 * @return
	 */
	public static ResponseResult<String> postRequest(String url,Object requestBody,Map<String,String> header,Map<String,String> parameter){
		getClient();
		ResponseResult<String> result = client.postForObject(url, requestBody, header, parameter);
		return result;
	}

	public static ResponseResult<String> putRequest(String url,Object requestBody,Map<String,String> header,Map<String,String> parameter){
		getClient();
		ResponseResult<String> result = client.putForObject(url, requestBody, header, parameter);
		return result;
	}
	
	public static ResponseResult<String> deleteRequest(String url,Object requestBody,Map<String,String> header,Map<String,String> parameter){
		getClient();
		ResponseResult<String> result = client.deleteForObject(url, requestBody, header, parameter);
		return result;
	}
}
